package com.dashu.service;

import com.dashu.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * Created by cuip on 2017/1/1.
 */
public interface UserService extends JpaRepository<User, Long> {

    /****************************************基于表达式的查询************************************************/
    /**
     * 基于主键ID查询一条数据
     * @param id
     * @return
     */
    User findById(Long id);

    /**
     * 基于用户名称查询
     * @param userName
     * @return
     */
    User findByUserName(String userName);

    /**
     * 基于用户名和密码查询
     * @param userName
     * @param password
     * @return
     */
    User findByUserNameAndPassword(String userName, String password);

    /**
     * 基于用户名模糊匹配
     * @param userName
     * @return
     */
    List<User> findByUserNameLike(String userName);

    /****************************************基于注解形式的HQL查询************************************************/

    /**
     * 基于用户名查询
     * @param userName
     * @return
     */
    @Query("FROM User WHERE userName=:userName AND password IS NOT NULL")
    List<User> findAll(@Param("userName") String userName);

    /**
     * 基于用户名修改密码
     * @param userName
     * @param password
     */
    @Query("UPDATE User u SET u.password = :password WHERE u.userName = :userName")
    @Modifying
    @Transactional
    void updatePasswordByUserName(@Param("userName") String userName,@Param("password") String password);

    /**
     * 基于用户名删除一条数据
     * @param userName
     */
    @Query("DELETE FROM User u WHERE u.userName = :userName")
    @Modifying
    @Transactional
    void deleteByUserName(@Param("userName") String userName);
}
